home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
007
/
x68000.arc
/
SOURCE.ARC
/
SYNTAXAN.DEF
< prev
next >
Wrap
Text File
|
1986-01-21
|
3KB
|
73 lines
DEFINITION MODULE SyntaxAnalyzer;
(* Analyzes the operands to provide information for CodeGenerator *)
FROM LongNumbers IMPORT
LONG;
FROM Parser IMPORT
OPERAND;
EXPORT QUALIFIED
SizeType, OpConfig, OpMode, Xtype, (* TYPEs *)
GetValue, GetSize, (* PROCEDURE's *)
GetInstModeSize, GetOperand, GetMultReg; (* PROCEDURE's *)
TYPE
OpMode = (DReg, (* Data Register *)
ARDir, (* Address Register Direct *)
ARInd, (* Address Register Indirect *)
ARPost, (* Address Register with Post-Increment *)
ARPre, (* Address Register with Pre-Decrement *)
ARDisp, (* Address Register with Displacement *)
ARDisX, (* Address Register with Disp. & Index *)
AbsW, (* Absolute Word (16-bit Address) *)
AbsL, (* Absolute Word (32-bit Address) *)
PCDisp, (* Program Counter Relative, with Displacement *)
PCDisX, (* Program Counter Relative, with Disp. & Index *)
Imm, (* Immediate *)
MultiM, (* Multiple Register Move *)
SR, (* Status Register *)
CCR, (* Condition Code Register *)
USP, (* User's Stack Pointer *)
Null); (* Error Condition, or Operand missing *)
Xtype = (X0, Dreg, Areg);
SizeType = (S0, Byte, Word, S3, Long);
OpConfig = RECORD (* OPERAND CONFIGURATION *)
Mode : OpMode;
Value : LONG;
Loc : CARDINAL; (* Location of Operand on line *)
Rn : CARDINAL; (* Register number *)
Xn : CARDINAL; (* Index Reg. nbr. *)
Xsize : SizeType; (* size of Index *)
X : Xtype; (* Is index Data or Address register? *)
END;
PROCEDURE GetValue (Operand : OPERAND; VAR Value : LONG);
(* determines value of operand (in Decimal, HEX, or via Symbol Table) *)
PROCEDURE GetSize (VAR Symbol : ARRAY OF CHAR; VAR Size : SizeType);
(* determines size of opcode: Byte, Word, or Long *)
PROCEDURE GetAbsSize (VAR Symbol : ARRAY OF CHAR; VAR AbsSize : SizeType);
(* determines size of operand: Word or Long *)
PROCEDURE GetInstModeSize (Mode : OpMode; Size : SizeType;
VAR InstSize : CARDINAL) : CARDINAL;
(* Determines the size for the various instruction modes. *)
PROCEDURE GetOperand (Oper : OPERAND; VAR Op : OpConfig);
(* Finds mode and value for source or destination operand *)
PROCEDURE GetMultReg (Oper : OPERAND; PreDec : BOOLEAN;
Loc : CARDINAL; VAR MultExt : BITSET);
(* Builds a BITSET marking each register used in a MOVEM instruction *)
END SyntaxAnalyzer.